const express = require('express');
const path = require('path');
const fs = require('fs');
const cors = require('cors');
const app = express();
const PORT = 8080; // 使用8080端口，避免与3000端口冲突

// 启用CORS，允许Unity客户端访问
app.use(cors());

// 静态资源目录
app.use('/assets', express.static(path.join(__dirname, '../assets')));

// 获取版本信息
app.get('/api/version', (req, res) => {
  const manifestPath = path.join(__dirname, '../versions/manifest.json');
  try {
    const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
    res.json(manifest);
  } catch (err) {
    console.error('获取版本信息错误:', err);
    res.status(500).json({ error: '无法读取版本信息' });
  }
});

// 获取特定版本资源列表
app.get('/api/resources/:version', (req, res) => {
  const version = req.params.version;
  const versionPath = path.join(__dirname, `../assets/${version}`);
  
  // 递归获取目录中所有文件
  const getFiles = (dir) => {
    try {
      const dirents = fs.readdirSync(dir, { withFileTypes: true });
      const files = dirents.map((dirent) => {
        const res = path.resolve(dir, dirent.name);
        return dirent.isDirectory() ? getFiles(res) : res;
      });
      return Array.prototype.concat(...files);
    } catch (err) {
      console.error(`读取目录错误 ${dir}:`, err);
      return [];
    }
  };
  
  try {
    const files = getFiles(versionPath)
      .map(file => file.replace(path.join(__dirname, '../assets/'), ''));
    res.json({ files });
  } catch (err) {
    console.error('获取资源列表错误:', err);
    res.status(404).json({ error: '版本不存在' });
  }
});

// 健康检查端点
app.get('/health', (req, res) => {
  res.json({ status: 'ok', time: new Date().toISOString() });
});

app.listen(PORT, () => {
  console.log(`资源服务器运行在 http://localhost:${PORT}`);
  console.log(`访问 http://localhost:${PORT}/health 检查服务器状态`);
  console.log(`访问 http://localhost:${PORT}/api/version 获取版本信息`);
}); 